package inge_soft.gestoriusNuevo.business.controller.implementation;

import java.util.ArrayList;
import java.util.List;

import org.zkoss.bind.annotation.BindingParam;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.Init;
import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.Sessions;
import org.zkoss.zk.ui.select.annotation.VariableResolver;
import org.zkoss.zk.ui.select.annotation.WireVariable;
import org.zkoss.zul.Combobox;

import inge_soft.gestoriusNuevo.business.service.abstraction.IInstitucionService;
import inge_soft.gestoriusNuevo.business.service.abstraction.IServicioEvento;
import inge_soft.gestoriusNuevo.persistence.entity.implementation.Categoria;
import inge_soft.gestoriusNuevo.persistence.entity.implementation.Evento;
import inge_soft.gestoriusNuevo.persistence.entity.implementation.Institucion;
import inge_soft.gestoriusNuevo.persistence.entity.implementation.TipoDomicilio;
import inge_soft.gestoriusNuevo.support.SecurityUtil;

@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)
public class EventoViewModel {
	  
    
    //private EventoService eservice; 
    @WireVariable("eventoService")
    private IServicioEvento sevento;
    @WireVariable("institucionService")
    private IInstitucionService serinti;
    private Evento evento;
    private boolean nuevo = true;
    private Institucion insitucion;
    private List<Institucion> listaIntituciones;
    private Categoria categoria;
    private List<Categoria> listCategoria;
    private boolean tieneCondicion = false;
    
    public Evento getEvento() {
            return evento;
    }

    public void setEvento(Evento evento) {
            this.evento = evento;
    }
    
    
    @Init
    public void init() {
            
            listaIntituciones = new ArrayList<Institucion>();
            listCategoria = new ArrayList<Categoria>();
            listCategoria.addAll(sevento.obtenerTodasCategoriasEventos());
            listaIntituciones.addAll(serinti.obtenerInstituciones(SecurityUtil.getUserName()));
            
            this.evento = (Evento)Sessions.getCurrent().getAttribute("evento");
            if(evento != null){
                    nuevo = false;
                    insitucion = this.evento.getInstitucion();
                    categoria = this.evento.getCategoria();
                    
            }else{
                    evento = new Evento();
            }
    }
    
    
    public IServicioEvento getSevento() {
            return sevento;
    }

    public void setSevento(IServicioEvento sevento) {
            this.sevento = sevento;
    }

    public boolean isNuevo() {
            return nuevo;
    }

    public void setNuevo(boolean nuevo) {
            this.nuevo = nuevo;
    }

    public Institucion getInsitucion() {
            return insitucion;
    }

    public void setInsitucion(Institucion insitucion) {
            this.insitucion = insitucion;
    }

    public List<Institucion> getListaIntituciones() {
            return listaIntituciones;
    }
    

    public IInstitucionService getSerinti() {
            return serinti;
    }

    public void setSerinti(IInstitucionService serinti) {
            this.serinti = serinti;
    }

    public void setListaIntituciones(List<Institucion> listaIntituciones) {
            this.listaIntituciones = listaIntituciones;
    }

    public Categoria getCategoria() {
            return categoria;
    }

    public void setCategoria(Categoria categoria) {
            this.categoria = categoria;
    }

    public List<Categoria> getListCategoria() {
            return listCategoria;
    }

    public void setListCategoria(List<Categoria> listCategoria) {
            this.listCategoria = listCategoria;
    }


    @Command
    public void crear(){
    	if(evento.getListaActividades()==null) System.out.println("lista actividades en null");
            if(nuevo){
                    evento.setCategoria(categoria);
                    sevento.crearEvento(insitucion, evento);
                    
            }else{
                    evento.setCategoria(categoria);
                    sevento.modificarEvento(evento);
            }
            
            Executions.getCurrent().sendRedirect("index.zul?destino=Eventos.zul","");
    }
    
    
    public boolean isTieneCondicion() {
            return tieneCondicion;
    }


    public void setTieneCondicion(boolean tieneCondicion) {
            this.tieneCondicion = tieneCondicion;
    }

    @Command
    public void volver(){
            Executions.getCurrent().sendRedirect("index.zul?destino=Eventos.zul","");
    }
    @Command
    @NotifyChange("condicionIngreso")
    public void condicion(){
    
            if(tieneCondicion){
                    tieneCondicion = false;
            }else{
                    tieneCondicion = true;
            }
            //notify();
    }
	
	

}
